package com.mlh.string;

/**
 * @author 缪林辉
 * @date 2024/2/28 13:07
 * @DESCRIPTION
 * 给定一个字符串 s 和一个整数 k，从字符串开头算起，每计数至 2k 个字符，就反转这 2k 字符中的前 k 个字符。
 * 如果剩余字符少于 k 个，则将剩余字符全部反转。
 * 如果剩余字符小于 2k 但大于或等于 k 个，则反转前 k 个字符，其余字符保持原样。
 * 输入：s = "abcdefg", k = 2
 * 输出："bacdfeg"
 */
public class ReverseString2 {
    //自己的解法
    public String method1(String s, int k) {
        char[] chars = s.toCharArray();
        int index=0;
        while (index+k-1<s.length()){
            method1Aux(chars,index,index+k-1);
            index=index+2*k;
        }
        if(index<s.length()){
            method1Aux(chars,index,s.length()-1);
        }
        return new String(chars);

    }
    //leetcode 更快的解法
    public String method2(String s, int k) {
        char[] chars = s.toCharArray();
        for (int i = 0; i < chars.length; i += 2 * k) {
            int start = i;
            // 确保不会越界
            int end = Math.min(start + k - 1, chars.length - 1);
            method1Aux(chars, start, end);
        }
        return new String(chars);
    }

    //写一个函数来完成字符串反转
    public void method1Aux(char[]chars,int begin,int end){
        while (begin<end){
            chars[begin]^=chars[end];
            chars[end]^=chars[begin];
            chars[begin]^=chars[end];
            begin++;
            end--;
        }
    }
}
